perm filename X2.FAI[TMP,LCS] blob sn#130170 filedate 1974-11-13 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00010 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE X
C00003 00003	BEG:	SETOM LINE
C00010 00004	DOIT:	ANDCM C,BITTAB(D)
C00012 00005		ADDI A,1
C00013 00006	FRD:	MOVSI A,'BIN'
C00015 00007	GETNAM:	MOVEI A,
C00016 00008	XINI:	OUTSTR [ASCIZ /TOTAL LENGTH IN INCHES (Y DIMENSION, DEFAULT = 11)?/]
C00019 00009	XGPOUT:	OPEN XGP,[1017↔'XGP   '↔0]
C00023 00010	FILNAM:	0
C00024 ENDMK
C⊗;
TITLE X

A←1
B←2
C←3
D←4
E←5
L←6
U←7
PEN←10
X←11
Y←12
XD←13
T←15
TT←16
P←17

LPDL←←69

DSK←←1
XGP←←2

LMAR←←=0
RMAR←←=1699
WIDTH←←RMAR-LMAR+1
LBUFL←←<WIDTH+43>/44
LSTBIT←←1⊗<LBUFL*44-WIDTH>
OVERLAP←←=50			;OVERLAP 1/4 INCH
BOTTOM←←=50			;SHIFT BOTTOM UP 1/4 INCH

    	;NUMBER OF STEPS TO WHERE P STARTS>
         DOFF←←-(LMAR+RMAR+1)/2+=90
;  +90 MOVES TO RIGHT FOR CENTERING X.

NBUFS←←4

EXTERN JOBREL,JOBFF

MAILBF:	BLOCK 40

SIGN:	0
LINE:	0
PNTR:	0
BEG:	SETOM LINE
	GETLIN LINE		;FOR ERROR PRINTOUT
MERGE:	CALLI
	HRRZS LINE		;CLEAR LINE BITS
	MOVE P,[-LPDL,,PDL-1]
FILIN:	OUTSTR [ASCIZ /FILE? (DEFAULT IS PLOT.BIN) /]
	PUSHJ P,FRD
	SETZ A,
YAGN1:	MOVE B,[-BOTTOM]
OUTSTR [ASCIZ/ORIGIN X OFFSET FROM SIDE (DEFAULT IS 4(CENTER))?/]
	PUSHJ P,RNUM
	JRST [	MOVE A,[DOFF]
		JRST YDEF]
	IMULI A,=100
	CAIN C,"."		;DECIMAL POINT?
	JRST [	INCHWL C
		CAIN C,15
		INCHWL C
		CAIL C,"0"
		CAILE C,"9"
		JRST .+1
		SUBI C,60
		IMULI C,=10
		SKIPE SIGN
		MOVN C,C
		ADD A,C
		PUSH P,A
		PUSHJ P,RNUM	;JUST GOBBLE THE REST
		JFCL
		POP P,A
		JRST .+1]
	MOVN A,A
	LSH A,1			;*2 (MAKE IT STEPS)
YDEFP:	CAIE C,12
	JRST [	CLRBFI
		JRST YAGN1]
YDEF:	ADD A,B
	MOVNM A,INIX#
AGAIN:	MOVE A,[FILNAM,,LKENT]
	BLT A,LKENT+3
	OPEN DSK,[14↔'DSK   '↔IBUF]
	JRST 4,.
	INBUF DSK,NBUFS
	LOOKUP DSK,LKENT
	JRST FNF
ASKLEN:	SETZM POOB#
	PUSHJ P,XINI
	JRST CORLUZ
	SETZM XX#
	SETZM YY#
	SETZM PENN#
OUTER:	IN DSK,
	JRST PLOT
	STATO DSK,20000
	JRST 4,.
	RELEAS DSK,
IFN LSTBIT-1,<PUSHJ P,XFIX>
	JRST XGPOUT


PLOT:	HRR 14,IBUF+1
	MOVN E,1(14)
	MOVSI E,(E)
	HRR E,IBUF+1
PLOT1:	MOVE 14,2(E)
	JUMPE 14,ENOUT
	LSHC 14,-14
	ASH 15,-30
	MOVEM 15,SVPEN#
	LSHC 14,-14
	ASH 15,-30
	MOVEM 15,SVY#
	LSHC 14,-14
	ASH 15,-30
	MOVEM 15,SVX#
	MOVM 14,SVPEN
	CAIN 14,1
	JRST PENOK
	SUBI 14,3
	CAMN 14,PENN
	JRST PENOK
	HRLI PEN,(<CAIA>)
	SKIPGE 14
	HRLI PEN,(<TDNN C,(D)>)
PENOK:	MOVEM 14,PENN
	MOVE 0,SVX
	SUB 0,XX
	SETZ 16,
	SKIPG 0
	MOVEI 16,2
	SKIPL 0
	MOVEI 16,1
	MOVE 14,SVY
	SUB 14,YY
	SETZ 15,
	SKIPG 14
	MOVEI 15,10
	SKIPL 14
	MOVEI 15,4
	MOVMS 14
	MOVMS 0
	CAMG 14,0
	JRST NOEX
	EXCH 14,0
	EXCH 15,16
NOEX:	SETZ C,
	JUMPE NOMOVE
	JUMPE 14,NORM
	SETZ 4,
	TLNE 14,200000
	JRST .+4
	LSH 14,1
	TRO 14,1
	AOJA 4,.-4
	SUBI 4,=34
MKSC:	MOVEM T,TSV#
	IDIV 14,0
	MOVE T,TSV
	MOVNS 4
	LSH 14,(4)
	MOVEM 14,STEP#
	SETZ 14,
	IOR 15,16
INLOOP:	ADD 14,STEP
	DPB 16,[360600,,000003]
	TLZE 14,200000
	DPB 15,[360600,,000003]
	JSR MAIN
	SOJG INLOOP
	JRST .+4
NORM:	DPB 16,[360600,,000003]
	JSR MAIN
	SOJG NORM
	MOVE 4,SVX
	MOVEM 4,XX
	MOVE 4,SVY
	MOVEM 4,YY
NOMOVE:	SKIPL SVPEN
	JRST ENOUT
	SETZM XX
	SETZM YY
ENOUT:	AOBJN E,PLOT1
	JRST OUTER

MAIN:	0
	JFFO C,DOIT
	JRST @MAIN

FNF:	PUSHJ P,DETCHK
	PUSHJ P,XERR
	PUSHJ P,ERRPNT
	ASCIZ /LOOKUP FAILED.
/
	SKIPGE DET
	CALLI 12
	JRST FILIN

CORLUZ:	MOVE T,TT
	LSH T,-12
	PUSH P,T
	PUSHJ P,DETCHK
	PUSHJ P,XERR
	POP P,T
	PUSHJ P,DECOUT
	PUSHJ P,ERRPNT
	ASCIZ / K OF CORE NEEDED!
/
	SKIPGE DET
	CALLI 12
	JRST ASKLEN

LOSE:	SKIPN POOB
	TLNN PEN,400000
	JRST DOPEN
	SETOM POOB
	PUSHJ P,DETCHK
	PUSHJ P,XERR
	PUSHJ P,ERRPNT
	ASCIZ /POINT OUT OF BOUNDS, /
	CAIGE Y,(L)
	JRST [	PUSHJ P,ERRPNT
		ASCIZ/-Y/
		JRST BACTT]
	PUSHJ P,ERRPNT
	ASCIZ/+Y/
BACTT:	MOVE TT,SVTT#
	JRST DOPEN

DECOUT:	IDIVI T,=10
	HRLM TT,(P)
	SKIPE T
	PUSHJ P,DECOUT
	HLRZ TT,(P)
	ADDI TT,60
	ROT TT,-7
	MOVEM TT,.+2
	PUSHJ P,ERRPNT
	0
	POPJ P,

ERRPNT:	MOVEM TT,SVTT
	HRRZ TT,(P)
	MOVEM TT,PNTR
	MOVEI TT,LINE
	TTYMES TT,
	JRST [	OUTSTR[ASCIZ/TTYMES FAILED	/]
		OUTSTR @PNTR
		OUTSTR[ASCIZ/
/]
		JRST .+1]
	POP P,TT
	HRL TT,(TT)
	TLNE TT,376
	AOJA TT,.-2
	JRST 1(TT)

XERR:	PUSHJ P,ERRPNT
	ASCIZ/
MESSAGE FROM X WORKING ON /
	MOVE TT,FILNAM
	PUSHJ P,SIXOUT
	PUSHJ P,ERRPNT
	ASCIZ/./
	HLLZ TT,FILEXT
	PUSHJ P,SIXOUT
	PUSHJ P,ERRPNT
	ASCIZ/[/
	MOVE TT,FILPPN
	PUSHJ P,SIXOUT
	PUSHJ P,ERRPNT
	ASCIZ/] : /
	POPJ P,

SIXOUT:	JUMPE TT,CPOPJ
	SETZ T,
	LSHC T,6
	ADDI T,40
	PUSH P,TT
	ROT T,-7
	MOVEM T,.+2
	PUSHJ P,ERRPNT
	0
	POP P,TT
	JRST SIXOUT

DETCHK:	SETOM DET#
	GETLIN DET
	HRRES DET
	SKIPL DET
	AOS (P)
	POPJ P,
DOIT:	ANDCM C,BITTAB(D)
	XCT MOVI1(D)
	XCT MOVI2(D)
DOI3:	XCT MOVI3(D)
DOPEN:	XCT PEN
	CAIGE Y,(L)
	JRST MAIN+1
	CAIL Y,-LBUFL-1(U)
	SKIPA
	IORM B,@X
	JRST MAIN+1

MOVI1:	HRLI PEN,(<CAIA>)
	HRLI PEN,(<TDNN C,(D)>)
	SUBI Y,LBUFL+1
	ADDI Y,LBUFL+1
	ROT B,-1
	JUMPGE B,DOI3

MOVI2:	JRST MAIN+1
	JRST MAIN+1
	CAIGE Y,(L)
	CAIL Y,-LBUFL-1(U)
	JUMPGE B,DOPEN
	XCT XMOVL(X)

MOVI3:	JRST 4,.
	JRST 4,.
	JRST LOSE
	JRST LOSE
	XCT XMOVR(X)
	ROT B,1
	ADDI A,1
XMOVL:	HRLOI X,XD
	REPEAT LBUFL-1,<SUBI X,1>
	SOJL A,.+1
	MOVE X,[Y,,LBUFL-1]
	AOJA A,DOI3

	SOJL A,XONR
XMOVR:	REPEAT LBUFL-1,<ADDI X,1>
	MOVE X,[XD,,LBUFL]
	ADDI A,1

XONR:	MOVSI X,Y
	AOJA A,DOPEN
FRD:	MOVSI A,'BIN'
	MOVEM A,FILEXT
	PUSHJ P,GETNAM
	SKIPN A
 	MOVE A,['PLOT  ']
    	MOVEM A,FILNAM
	CAIE C,"."
	JRST NOEXT
	PUSHJ P,GETNAM
	MOVEM A,FILEXT
NOEXT:	CAIE C,"["
	JRST FRDX
	PUSHJ P,GETP
	HRLZM A,FILPPN
	PUSHJ P,GETP
	HRRM A,FILPPN
FRDX:	INCHRW C
	CAIE C,12
	JRST FRDX
	POPJ P,

RNUM:	INCHWL C
	CAIN C,15
	JRST RNUM
	CAIN C,12
	POPJ P,
	AOS (P)
	MOVEI A,
	SETZM SIGN
	CAIN C,"-"
	JRST [	PUSHJ P,RNUML
		SETOM SIGN
		MOVN A,A
		POPJ P,]
	CAIN C,"+"
RNUML:	INCHWL C
	CAIL C,"0"
	CAILE C,"9"
	JRST RNUMX
	IMULI A,12
	ADDI A,-"0"(C)
	JRST RNUML

RNUMX:	CAIN C,15
	INCHRW C
	POPJ P,
GETNAM:	MOVEI A,
	MOVE B,[440600,,A]
GETNML:	PUSHJ P,RCH
	POPJ P,
	SUBI C,40
	TLNE B,770000
	IDPB C,B
	JRST GETNML

GETP:	MOVEI A,
GETPL:	PUSHJ P,RCH
	POPJ P,
	TRNE A,770000
	JRST GETPL
	LSH A,6
	ADDI A,-40(C)
	JRST GETPL

RCH:	INCHWL C
	CAIN C,42
	JRST RCHQ
	CAIE C,11
	CAIN C," "
	JRST RCH
	CAIE C,"."
	CAIN C,","
	POPJ P,
	CAIE C,"["
	CAIN C,"]"
	POPJ P,
RCHQR:	CAIGE C,40
	POPJ P,
	CAIL C,"a"
	CAILE C,"z"
	CAIA
	SUBI C,40
	JRST POPJ1

RCHQ:	INCHWL C
	JRST RCHQR
XINI:	OUTSTR [ASCIZ /TOTAL LENGTH IN INCHES (Y DIMENSION, DEFAULT = 11)?/]
	PUSHJ P,RNUM
	MOVEI A,=11		;ASSUME 11 INCHES
	JUMPLE A,[XINLER:CLRBFI
		JRST XINI]
	CAIE C,12
	JRST XINLER
	IMULI A,=200
	PUSH P,A		;SAVE THIS
YINI1:	OUTSTR [ASCIZ \ORIGIN Y OFFSET FROM BOTTOM, 200/IN.(DEFAULT IS 100)?\]
	PUSHJ P,RNUM
	JRST [	MOVEI A,=100
		JRST IYDEF]
	CAIE C,12
	JRST [	CLRBFI
		JRST YINI1]
IYDEF:	IMULI A,LBUFL+1
	MOVEM A,IYPOS#
	POP P,A
XDEF:	MOVEM A,LINCNT#
	MOVEI B,-1(A)
	IMULI A,LBUFL+1
	MOVE T,JOBFF
	MOVEM T,XGPPTR
	SOS XGPPTR
	MOVEI T,2(A)		;2 EXTRA WORDS
	MOVNI TT,(T)
	ADD T,XGPPTR
	HRLM TT,XGPPTR
	MOVE TT,T
	CALLI T,11
	POPJ P,
	HRRZ L,XGPPTR
	MOVSI T,1(L)
	HRRI T,2(L)
	SETZM 1(L)
	MOVE U,JOBREL
	BLT T,(U)
	MOVE TT,[BYTE (12)4001,LMAR,LBUFL]
	MOVEM TT,1(L)		;FIRST ONE HAS MARK AND CUT WITH IT
	TLZ TT,400000		;DELETE MARK AND CUT
	MOVEI T,1+LBUFL+1(L)
XINL:	MOVEM TT,(T)
	ADDI T,LBUFL+1
	SOJG B,XINL
	MOVSI TT,400100
	MOVEM TT,(T)
	MOVE PEN,[CAIA BYTTAB]
	MOVE Y,IYPOS
	ADDI Y,2(L)
	MOVEI XD,DBUF+1
	SKIPL A,INIX		;WHERE DO WE START
	JRST MAYBON
	SUBI A,43
	IDIV A,[-44]
	HRLOI X,XD
	SOJA A,SETB

MAYBON:	ADDI A,43
	IDIVI A,44
	CAILE A,LBUFL
	JRST OFFRT
	MOVE X,A
	SETZ A,
	HRLI X,Y
	JRST SETB

OFFRT:	MOVE X,[XD,,LBUFL]
	SUBI A,LBUFL
SETB:	MOVE B,INIX
	IDIVI B,44
	MOVSI B,400000
	MOVN C,C
	ROT B,(C)
POPJ1:	AOS (P)
CPOPJ:	POPJ P,
XGPOUT:	OPEN XGP,[1017↔'XGP   '↔0]
	JRST NOXGP
	OUTSTR[ASCIZ/CRANKING XGP
/]
	LOCK
OUTIT:	OUT XGP,XGPPTR
	JRST OUTOK
DSKERR:	PUSHJ P,DETCHK
	PUSHJ P,XERR
	PUSHJ P,ERRPNT
	ASCIZ /XGP OUTPUT ERROR.
/
OUTOK:	UNLOCK
	RELEAS XGP,
	JRST XMORE

XMORE:	PUSHJ P,CORDWN			;REALLY DONE, CORE DOWN
	PUSHJ P,DETCHK
	JRST DODEL			;DELETE AUTOMATICALLY IF DETACHED
	OUTSTR[ASCIZ/DELETE BIN FILE?/]
	INCHRW C
	CAIN C,15
	INCHRW C
	CAIE C,12
	OUTSTR[ASCIZ/
/]
	CAIE C,"Y"
	CAIN C,"y"
	CAIA
	JRST NODEL
DODEL:	MOVE A,[FILNAM,,LKENT]
	BLT A,LKENT+3
	INIT DSK,17
	'DSK   '
	0
	JRST [	SKIPGE DET
		PUSHJ P,XERR
		PUSHJ P,ERRPNT
		ASCIZ/COULDN'T GET DISK FOR DELETE!
/
		JRST NODEL]
	LOOKUP DSK,LKENT
	JRST [	SKIPGE DET
		PUSHJ P,XERR
		PUSHJ P,ERRPNT
		ASCIZ/LOOKUP FOR DELETE FAILED!
/
		JRST NODEL]
	MOVE A,FILPPN
	MOVEM A,LKENT+3
	SETZM LKENT
	RENAME DSK,LKENT
	CAIA
	JRST NODEL
	SKIPGE DET
	PUSHJ P,XERR
	PUSHJ P,ERRPNT
	ASCIZ/RENAME FOR DELETE FAILED!
/
NODEL:	RELEASE DSK,
	SKIPGE DET
	PUSHJ P,XERR
	PUSHJ P,ERRPNT
	ASCIZ/ALL DONE!
/
	CALLI 12		;LEAVE

NOXGP:	PUSHJ P,DETCHK
	PUSHJ P,XERR
	PUSHJ P,ERRPNT
	ASCIZ /XGP NOT AVAILABLE (I THOUGHT I WAS WAITING FOR IT)!
/
	POPJ P,

XGPPTR:	BLOCK 2

IFN LSTBIT-1,<
XFIX:	MOVE A,[LSTBIT-1]
	MOVE C,LINCNT
	HRRZ D,XGPPTR
XFIXL:	ANDCAM A,LBUFL-1+2(D)
	ADDI D,LBUFL+1
	SOJG C,XFIXL
	POPJ P,
>
CORDWN:	MOVE T,JOBFF
	SUBI T,1
	CALLI T,11
	JRST 4,.
	POPJ P,
FILNAM:	0
FILEXT:	0
	0
FILPPN:	0

LKENT:	BLOCK 4

XGSNAM:	0
XGSEXT:	0
	0
XGSPPN:	0

IBUF:	BLOCK 3

BITTAB:	FOR I←43,0,-1{1⊗I
}
BYTTAB:	FOR I←36,0,-6{REPEAT 6,{77⊗I}}

DBUF:	BLOCK LBUFL+2

PDL:	BLOCK LPDL

END BEG